package uk.kludje.experimental.stream; import uk.kludje.Ensure; import java.util.Iterator; import java.util.NoSuchElementException; import java.util.function.Predicate; import java.util.function.Supplier; /** * Created by user on 17/08/16. */ class AltIterators { public static <E> Iterator<E> iterateUntil(Supplier<? extends E> supplier, Predicate<? super E> stop) { Ensure.that(supplier != null, "supplier != null"); Ensure.that(stop != null, "stop != null"); class UntilIterator implements Iterator<E> { E next = supplier.get(); @Override public boolean hasNext() { return stop.test(next); } @Override public E next() { if (!hasNext()) { throw new NoSuchElementException("Stopped on value '" + next + "'"); } try { return next; } finally { next = supplier.get(); } } } return new UntilIterator(); } }